package com.itheima.demo;

import com.itheima.healt.entlty.Result;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
         * redisTemplate.opsForList();//操作list
         redisTemplate.opsForValue();//操作字符串
         redisTemplate.opsForCluster();//集群时使用
         redisTemplate.opsForGeo();//地理位置时使用
         redisTemplate.opsForHash();//操作hash
         redisTemplate.opsForSet();//操作set
         redisTemplate.opsForZSet();//操作有序set

 * StringRedisTemplate默认采用的是String的序列化策略，保存的key和value都是采用此策略序列化保存的。
 * RedisTemplate默认采用的是JDK的序列化策略，保存的key和value都是采用此策略序列化保存的。

 */
public class RedisDemo {

    public static void main(String[] args) {
        //使用 Spring data 整合redis  后 应该使用  redisTemplate
        //先加载配置文件
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext-redistemplate.xml");
        //注入 整合Spring Data_redis 后  就可以存储对象了    "redisTemplate"  关联配置文件的 id
        RedisTemplate redisTemplate = (RedisTemplate) app.getBean("redisTemplate");
              // 操作整合后的Redis  可以参考上方 绿色的 注释
                  //想要操作那种数据结构 就先获取对应的API  osp开头  这里我们要操作List 集合类型的  返回的也是一个List集合
              // 先获取数据类型的 类型对象 然后再.set（"key","bb"）
              redisTemplate.opsForValue().set("aa","bb");   //  这样再redis 中 存储的就是一个字符串
              // 执行main 方法  就算存储好了 数据然后启动redis  打开图形化工具  就可以再redis 中看到存储的数据
//---------------------------- 如何取出redis 中的数据 代码实现  以下是使用Spring data 整合后的redis 工具
        String aa = (String) redisTemplate.opsForValue().get("aa");
        System.out.println(aa);
                //以下是存储  ------------------对象------------------
        Result resout = new Result(true,"你好");
        //将resout 对象存到 bb 中 返回一个字符串类型
        redisTemplate.opsForValue().set("bb",resout);
        //输出 bb 取出 resout对象
        Object bb = redisTemplate.opsForValue().get("bb");
        // 此时 返回的就是 resout 对象    key 就是bb
        System.out.println(bb);




/*
        //  有了Spring data 整合redis    jedisPool 就可以不使用了

         JedisPool pool= (JedisPool)app.getBean("jedisPool");
        Jedis jedis = pool.getResource();
        jedis.sadd("myset","aa","bb","cc");
        jedis.sadd("myset","dd");
        jedis.sadd("sheset","bb","cc");
 */


//
//        Set<String> sdiff = jedis.sdiff("myset","sheset");
//        System.out.println(sdiff);
////        qinu.delete(sdiff)----任务调度   任务周期
//        //   redis  多出来的有没有删除？
//        //  set---> list----array
//        List<String> list = new ArrayList<String>(sdiff);
//        String[] arr = new String[]{};//    空字符串数组
//        String[] array = list.toArray(arr);
//
//        jedis.srem("myset",array);
//
//        jedis.del("myset");
//        jedis.del("sheset");//  删除key对应的数据

//        RedisTemplate<String,String> redisTemplate =(RedisTemplate)app.getBean("redisTemplate");
//        System.out.println(redisTemplate);
//
//        redisTemplate.opsForValue().set("kk","你好");
//        redisTemplate.opsForValue().set("pp","uu");
////        redisTemplate.opsForValue().set();
//
//        redisTemplate.opsForSet().add("aa","bb","cc","mm");
//        redisTemplate.opsForSet().add("mm","bb","cc","dd");
//        Set difference = redisTemplate.opsForSet().difference("aa", "mm");
//        System.out.println(difference);  //  mm
//        Set aa = redisTemplate.opsForSet().members("aa");
//        System.out.println(aa);

        //  七牛云 图片 已经被删除   那么 redis  对应的两个集合   有没有保留的意义？

    }
}
